/*
    MANGO Multimedia Development Platform
    Copyright (C) 2012-2019 Twilight Finland 3D Oy Ltd. All rights reserved.
*/

// 2 component accessors

#if defined(VECTOR2_SHUFFLE_ACCESSOR2)
    VECTOR2_SHUFFLE_ACCESSOR2(0, 0, xx);
    VECTOR2_SHUFFLE_ACCESSOR2(0, 1, xy);
    VECTOR2_SHUFFLE_ACCESSOR2(1, 0, yx);
    VECTOR2_SHUFFLE_ACCESSOR2(1, 1, yy);
#endif

// 3 component accessors

#if defined(VECTOR3_SHUFFLE_ACCESSOR2)
    VECTOR3_SHUFFLE_ACCESSOR2(0, 0, xx);
    VECTOR3_SHUFFLE_ACCESSOR2(1, 0, yx);
    VECTOR3_SHUFFLE_ACCESSOR2(2, 0, zx);
    VECTOR3_SHUFFLE_ACCESSOR2(0, 1, xy);
    VECTOR3_SHUFFLE_ACCESSOR2(1, 1, yy);
    VECTOR3_SHUFFLE_ACCESSOR2(2, 1, zy);
    VECTOR3_SHUFFLE_ACCESSOR2(0, 2, xz);
    VECTOR3_SHUFFLE_ACCESSOR2(1, 2, yz);
    VECTOR3_SHUFFLE_ACCESSOR2(2, 2, zz);
#endif

#if defined(VECTOR3_SHUFFLE_ACCESSOR3)
    VECTOR3_SHUFFLE_ACCESSOR3(0, 0, 0, xxx);
    VECTOR3_SHUFFLE_ACCESSOR3(1, 0, 0, yxx);
    VECTOR3_SHUFFLE_ACCESSOR3(2, 0, 0, zxx);
    VECTOR3_SHUFFLE_ACCESSOR3(0, 1, 0, xyx);
    VECTOR3_SHUFFLE_ACCESSOR3(1, 1, 0, yyx);
    VECTOR3_SHUFFLE_ACCESSOR3(2, 1, 0, zyx);
    VECTOR3_SHUFFLE_ACCESSOR3(0, 2, 0, xzx);
    VECTOR3_SHUFFLE_ACCESSOR3(1, 2, 0, yzx);
    VECTOR3_SHUFFLE_ACCESSOR3(2, 2, 0, zzx);
    VECTOR3_SHUFFLE_ACCESSOR3(0, 0, 1, xxy);
    VECTOR3_SHUFFLE_ACCESSOR3(1, 0, 1, yxy);
    VECTOR3_SHUFFLE_ACCESSOR3(2, 0, 1, zxy);
    VECTOR3_SHUFFLE_ACCESSOR3(0, 1, 1, xyy);
    VECTOR3_SHUFFLE_ACCESSOR3(1, 1, 1, yyy);
    VECTOR3_SHUFFLE_ACCESSOR3(2, 1, 1, zyy);
    VECTOR3_SHUFFLE_ACCESSOR3(0, 2, 1, xzy);
    VECTOR3_SHUFFLE_ACCESSOR3(1, 2, 1, yzy);
    VECTOR3_SHUFFLE_ACCESSOR3(2, 2, 1, zzy);
    VECTOR3_SHUFFLE_ACCESSOR3(0, 0, 2, xxz);
    VECTOR3_SHUFFLE_ACCESSOR3(1, 0, 2, yxz);
    VECTOR3_SHUFFLE_ACCESSOR3(2, 0, 2, zxz);
    VECTOR3_SHUFFLE_ACCESSOR3(0, 1, 2, xyz);
    VECTOR3_SHUFFLE_ACCESSOR3(1, 1, 2, yyz);
    VECTOR3_SHUFFLE_ACCESSOR3(2, 1, 2, zyz);
    VECTOR3_SHUFFLE_ACCESSOR3(0, 2, 2, xzz);
    VECTOR3_SHUFFLE_ACCESSOR3(1, 2, 2, yzz);
    VECTOR3_SHUFFLE_ACCESSOR3(2, 2, 2, zzz);
#endif

// 4 component accessors

#if defined(VECTOR4_SHUFFLE_ACCESSOR2)
    VECTOR4_SHUFFLE_ACCESSOR2(0, 0, xx);
    VECTOR4_SHUFFLE_ACCESSOR2(1, 0, yx);
    VECTOR4_SHUFFLE_ACCESSOR2(2, 0, zx);
    VECTOR4_SHUFFLE_ACCESSOR2(3, 0, wx);
    VECTOR4_SHUFFLE_ACCESSOR2(0, 1, xy);
    VECTOR4_SHUFFLE_ACCESSOR2(1, 1, yy);
    VECTOR4_SHUFFLE_ACCESSOR2(2, 1, zy);
    VECTOR4_SHUFFLE_ACCESSOR2(3, 1, wy);
    VECTOR4_SHUFFLE_ACCESSOR2(0, 2, xz);
    VECTOR4_SHUFFLE_ACCESSOR2(1, 2, yz);
    VECTOR4_SHUFFLE_ACCESSOR2(2, 2, zz);
    VECTOR4_SHUFFLE_ACCESSOR2(3, 2, wz);
    VECTOR4_SHUFFLE_ACCESSOR2(0, 3, xw);
    VECTOR4_SHUFFLE_ACCESSOR2(1, 3, yw);
    VECTOR4_SHUFFLE_ACCESSOR2(2, 3, zw);
    VECTOR4_SHUFFLE_ACCESSOR2(3, 3, ww);
#endif

#if defined(VECTOR4_SHUFFLE_ACCESSOR3)
    VECTOR4_SHUFFLE_ACCESSOR3(0, 0, 0, xxx);
    VECTOR4_SHUFFLE_ACCESSOR3(1, 0, 0, yxx);
    VECTOR4_SHUFFLE_ACCESSOR3(2, 0, 0, zxx);
    VECTOR4_SHUFFLE_ACCESSOR3(3, 0, 0, wxx);
    VECTOR4_SHUFFLE_ACCESSOR3(0, 1, 0, xyx);
    VECTOR4_SHUFFLE_ACCESSOR3(1, 1, 0, yyx);
    VECTOR4_SHUFFLE_ACCESSOR3(2, 1, 0, zyx);
    VECTOR4_SHUFFLE_ACCESSOR3(3, 1, 0, wyx);
    VECTOR4_SHUFFLE_ACCESSOR3(0, 2, 0, xzx);
    VECTOR4_SHUFFLE_ACCESSOR3(1, 2, 0, yzx);
    VECTOR4_SHUFFLE_ACCESSOR3(2, 2, 0, zzx);
    VECTOR4_SHUFFLE_ACCESSOR3(3, 2, 0, wzx);
    VECTOR4_SHUFFLE_ACCESSOR3(0, 3, 0, xwx);
    VECTOR4_SHUFFLE_ACCESSOR3(1, 3, 0, ywx);
    VECTOR4_SHUFFLE_ACCESSOR3(2, 3, 0, zwx);
    VECTOR4_SHUFFLE_ACCESSOR3(3, 3, 0, wwx);
    VECTOR4_SHUFFLE_ACCESSOR3(0, 0, 1, xxy);
    VECTOR4_SHUFFLE_ACCESSOR3(1, 0, 1, yxy);
    VECTOR4_SHUFFLE_ACCESSOR3(2, 0, 1, zxy);
    VECTOR4_SHUFFLE_ACCESSOR3(3, 0, 1, wxy);
    VECTOR4_SHUFFLE_ACCESSOR3(0, 1, 1, xyy);
    VECTOR4_SHUFFLE_ACCESSOR3(1, 1, 1, yyy);
    VECTOR4_SHUFFLE_ACCESSOR3(2, 1, 1, zyy);
    VECTOR4_SHUFFLE_ACCESSOR3(3, 1, 1, wyy);
    VECTOR4_SHUFFLE_ACCESSOR3(0, 2, 1, xzy);
    VECTOR4_SHUFFLE_ACCESSOR3(1, 2, 1, yzy);
    VECTOR4_SHUFFLE_ACCESSOR3(2, 2, 1, zzy);
    VECTOR4_SHUFFLE_ACCESSOR3(3, 2, 1, wzy);
    VECTOR4_SHUFFLE_ACCESSOR3(0, 3, 1, xwy);
    VECTOR4_SHUFFLE_ACCESSOR3(1, 3, 1, ywy);
    VECTOR4_SHUFFLE_ACCESSOR3(2, 3, 1, zwy);
    VECTOR4_SHUFFLE_ACCESSOR3(3, 3, 1, wwy);
    VECTOR4_SHUFFLE_ACCESSOR3(0, 0, 2, xxz);
    VECTOR4_SHUFFLE_ACCESSOR3(1, 0, 2, yxz);
    VECTOR4_SHUFFLE_ACCESSOR3(2, 0, 2, zxz);
    VECTOR4_SHUFFLE_ACCESSOR3(3, 0, 2, wxz);
    VECTOR4_SHUFFLE_ACCESSOR3(0, 1, 2, xyz);
    VECTOR4_SHUFFLE_ACCESSOR3(1, 1, 2, yyz);
    VECTOR4_SHUFFLE_ACCESSOR3(2, 1, 2, zyz);
    VECTOR4_SHUFFLE_ACCESSOR3(3, 1, 2, wyz);
    VECTOR4_SHUFFLE_ACCESSOR3(0, 2, 2, xzz);
    VECTOR4_SHUFFLE_ACCESSOR3(1, 2, 2, yzz);
    VECTOR4_SHUFFLE_ACCESSOR3(2, 2, 2, zzz);
    VECTOR4_SHUFFLE_ACCESSOR3(3, 2, 2, wzz);
    VECTOR4_SHUFFLE_ACCESSOR3(0, 3, 2, xwz);
    VECTOR4_SHUFFLE_ACCESSOR3(1, 3, 2, ywz);
    VECTOR4_SHUFFLE_ACCESSOR3(2, 3, 2, zwz);
    VECTOR4_SHUFFLE_ACCESSOR3(3, 3, 2, wwz);
    VECTOR4_SHUFFLE_ACCESSOR3(0, 0, 3, xxw);
    VECTOR4_SHUFFLE_ACCESSOR3(1, 0, 3, yxw);
    VECTOR4_SHUFFLE_ACCESSOR3(2, 0, 3, zxw);
    VECTOR4_SHUFFLE_ACCESSOR3(3, 0, 3, wxw);
    VECTOR4_SHUFFLE_ACCESSOR3(0, 1, 3, xyw);
    VECTOR4_SHUFFLE_ACCESSOR3(1, 1, 3, yyw);
    VECTOR4_SHUFFLE_ACCESSOR3(2, 1, 3, zyw);
    VECTOR4_SHUFFLE_ACCESSOR3(3, 1, 3, wyw);
    VECTOR4_SHUFFLE_ACCESSOR3(0, 2, 3, xzw);
    VECTOR4_SHUFFLE_ACCESSOR3(1, 2, 3, yzw);
    VECTOR4_SHUFFLE_ACCESSOR3(2, 2, 3, zzw);
    VECTOR4_SHUFFLE_ACCESSOR3(3, 2, 3, wzw);
    VECTOR4_SHUFFLE_ACCESSOR3(0, 3, 3, xww);
    VECTOR4_SHUFFLE_ACCESSOR3(1, 3, 3, yww);
    VECTOR4_SHUFFLE_ACCESSOR3(2, 3, 3, zww);
    VECTOR4_SHUFFLE_ACCESSOR3(3, 3, 3, www);
#endif

#if defined(VECTOR4_SHUFFLE_ACCESSOR4)
    VECTOR4_SHUFFLE_ACCESSOR4(0, 0, 0, 0, xxxx);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 0, 0, 0, yxxx);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 0, 0, 0, zxxx);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 0, 0, 0, wxxx);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 1, 0, 0, xyxx);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 1, 0, 0, yyxx);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 1, 0, 0, zyxx);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 1, 0, 0, wyxx);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 2, 0, 0, xzxx);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 2, 0, 0, yzxx);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 2, 0, 0, zzxx);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 2, 0, 0, wzxx);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 3, 0, 0, xwxx);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 3, 0, 0, ywxx);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 3, 0, 0, zwxx);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 3, 0, 0, wwxx);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 0, 1, 0, xxyx);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 0, 1, 0, yxyx);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 0, 1, 0, zxyx);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 0, 1, 0, wxyx);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 1, 1, 0, xyyx);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 1, 1, 0, yyyx);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 1, 1, 0, zyyx);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 1, 1, 0, wyyx);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 2, 1, 0, xzyx);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 2, 1, 0, yzyx);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 2, 1, 0, zzyx);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 2, 1, 0, wzyx);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 3, 1, 0, xwyx);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 3, 1, 0, ywyx);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 3, 1, 0, zwyx);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 3, 1, 0, wwyx);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 0, 2, 0, xxzx);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 0, 2, 0, yxzx);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 0, 2, 0, zxzx);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 0, 2, 0, wxzx);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 1, 2, 0, xyzx);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 1, 2, 0, yyzx);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 1, 2, 0, zyzx);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 1, 2, 0, wyzx);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 2, 2, 0, xzzx);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 2, 2, 0, yzzx);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 2, 2, 0, zzzx);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 2, 2, 0, wzzx);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 3, 2, 0, xwzx);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 3, 2, 0, ywzx);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 3, 2, 0, zwzx);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 3, 2, 0, wwzx);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 0, 3, 0, xxwx);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 0, 3, 0, yxwx);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 0, 3, 0, zxwx);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 0, 3, 0, wxwx);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 1, 3, 0, xywx);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 1, 3, 0, yywx);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 1, 3, 0, zywx);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 1, 3, 0, wywx);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 2, 3, 0, xzwx);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 2, 3, 0, yzwx);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 2, 3, 0, zzwx);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 2, 3, 0, wzwx);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 3, 3, 0, xwwx);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 3, 3, 0, ywwx);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 3, 3, 0, zwwx);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 3, 3, 0, wwwx);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 0, 0, 1, xxxy);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 0, 0, 1, yxxy);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 0, 0, 1, zxxy);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 0, 0, 1, wxxy);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 1, 0, 1, xyxy);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 1, 0, 1, yyxy);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 1, 0, 1, zyxy);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 1, 0, 1, wyxy);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 2, 0, 1, xzxy);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 2, 0, 1, yzxy);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 2, 0, 1, zzxy);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 2, 0, 1, wzxy);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 3, 0, 1, xwxy);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 3, 0, 1, ywxy);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 3, 0, 1, zwxy);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 3, 0, 1, wwxy);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 0, 1, 1, xxyy);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 0, 1, 1, yxyy);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 0, 1, 1, zxyy);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 0, 1, 1, wxyy);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 1, 1, 1, xyyy);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 1, 1, 1, yyyy);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 1, 1, 1, zyyy);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 1, 1, 1, wyyy);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 2, 1, 1, xzyy);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 2, 1, 1, yzyy);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 2, 1, 1, zzyy);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 2, 1, 1, wzyy);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 3, 1, 1, xwyy);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 3, 1, 1, ywyy);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 3, 1, 1, zwyy);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 3, 1, 1, wwyy);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 0, 2, 1, xxzy);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 0, 2, 1, yxzy);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 0, 2, 1, zxzy);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 0, 2, 1, wxzy);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 1, 2, 1, xyzy);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 1, 2, 1, yyzy);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 1, 2, 1, zyzy);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 1, 2, 1, wyzy);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 2, 2, 1, xzzy);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 2, 2, 1, yzzy);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 2, 2, 1, zzzy);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 2, 2, 1, wzzy);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 3, 2, 1, xwzy);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 3, 2, 1, ywzy);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 3, 2, 1, zwzy);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 3, 2, 1, wwzy);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 0, 3, 1, xxwy);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 0, 3, 1, yxwy);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 0, 3, 1, zxwy);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 0, 3, 1, wxwy);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 1, 3, 1, xywy);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 1, 3, 1, yywy);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 1, 3, 1, zywy);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 1, 3, 1, wywy);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 2, 3, 1, xzwy);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 2, 3, 1, yzwy);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 2, 3, 1, zzwy);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 2, 3, 1, wzwy);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 3, 3, 1, xwwy);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 3, 3, 1, ywwy);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 3, 3, 1, zwwy);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 3, 3, 1, wwwy);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 0, 0, 2, xxxz);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 0, 0, 2, yxxz);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 0, 0, 2, zxxz);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 0, 0, 2, wxxz);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 1, 0, 2, xyxz);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 1, 0, 2, yyxz);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 1, 0, 2, zyxz);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 1, 0, 2, wyxz);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 2, 0, 2, xzxz);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 2, 0, 2, yzxz);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 2, 0, 2, zzxz);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 2, 0, 2, wzxz);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 3, 0, 2, xwxz);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 3, 0, 2, ywxz);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 3, 0, 2, zwxz);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 3, 0, 2, wwxz);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 0, 1, 2, xxyz);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 0, 1, 2, yxyz);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 0, 1, 2, zxyz);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 0, 1, 2, wxyz);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 1, 1, 2, xyyz);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 1, 1, 2, yyyz);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 1, 1, 2, zyyz);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 1, 1, 2, wyyz);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 2, 1, 2, xzyz);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 2, 1, 2, yzyz);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 2, 1, 2, zzyz);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 2, 1, 2, wzyz);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 3, 1, 2, xwyz);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 3, 1, 2, ywyz);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 3, 1, 2, zwyz);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 3, 1, 2, wwyz);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 0, 2, 2, xxzz);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 0, 2, 2, yxzz);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 0, 2, 2, zxzz);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 0, 2, 2, wxzz);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 1, 2, 2, xyzz);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 1, 2, 2, yyzz);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 1, 2, 2, zyzz);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 1, 2, 2, wyzz);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 2, 2, 2, xzzz);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 2, 2, 2, yzzz);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 2, 2, 2, zzzz);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 2, 2, 2, wzzz);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 3, 2, 2, xwzz);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 3, 2, 2, ywzz);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 3, 2, 2, zwzz);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 3, 2, 2, wwzz);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 0, 3, 2, xxwz);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 0, 3, 2, yxwz);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 0, 3, 2, zxwz);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 0, 3, 2, wxwz);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 1, 3, 2, xywz);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 1, 3, 2, yywz);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 1, 3, 2, zywz);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 1, 3, 2, wywz);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 2, 3, 2, xzwz);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 2, 3, 2, yzwz);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 2, 3, 2, zzwz);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 2, 3, 2, wzwz);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 3, 3, 2, xwwz);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 3, 3, 2, ywwz);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 3, 3, 2, zwwz);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 3, 3, 2, wwwz);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 0, 0, 3, xxxw);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 0, 0, 3, yxxw);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 0, 0, 3, zxxw);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 0, 0, 3, wxxw);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 1, 0, 3, xyxw);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 1, 0, 3, yyxw);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 1, 0, 3, zyxw);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 1, 0, 3, wyxw);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 2, 0, 3, xzxw);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 2, 0, 3, yzxw);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 2, 0, 3, zzxw);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 2, 0, 3, wzxw);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 3, 0, 3, xwxw);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 3, 0, 3, ywxw);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 3, 0, 3, zwxw);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 3, 0, 3, wwxw);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 0, 1, 3, xxyw);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 0, 1, 3, yxyw);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 0, 1, 3, zxyw);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 0, 1, 3, wxyw);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 1, 1, 3, xyyw);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 1, 1, 3, yyyw);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 1, 1, 3, zyyw);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 1, 1, 3, wyyw);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 2, 1, 3, xzyw);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 2, 1, 3, yzyw);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 2, 1, 3, zzyw);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 2, 1, 3, wzyw);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 3, 1, 3, xwyw);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 3, 1, 3, ywyw);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 3, 1, 3, zwyw);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 3, 1, 3, wwyw);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 0, 2, 3, xxzw);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 0, 2, 3, yxzw);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 0, 2, 3, zxzw);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 0, 2, 3, wxzw);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 1, 2, 3, xyzw);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 1, 2, 3, yyzw);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 1, 2, 3, zyzw);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 1, 2, 3, wyzw);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 2, 2, 3, xzzw);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 2, 2, 3, yzzw);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 2, 2, 3, zzzw);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 2, 2, 3, wzzw);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 3, 2, 3, xwzw);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 3, 2, 3, ywzw);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 3, 2, 3, zwzw);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 3, 2, 3, wwzw);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 0, 3, 3, xxww);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 0, 3, 3, yxww);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 0, 3, 3, zxww);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 0, 3, 3, wxww);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 1, 3, 3, xyww);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 1, 3, 3, yyww);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 1, 3, 3, zyww);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 1, 3, 3, wyww);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 2, 3, 3, xzww);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 2, 3, 3, yzww);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 2, 3, 3, zzww);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 2, 3, 3, wzww);
    VECTOR4_SHUFFLE_ACCESSOR4(0, 3, 3, 3, xwww);
    VECTOR4_SHUFFLE_ACCESSOR4(1, 3, 3, 3, ywww);
    VECTOR4_SHUFFLE_ACCESSOR4(2, 3, 3, 3, zwww);
    VECTOR4_SHUFFLE_ACCESSOR4(3, 3, 3, 3, wwww);
#endif
